﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using IQReportes.Models;
using IQReportes.Utils;

namespace IQReportes.Boundary
{
    public class FormatterPanelControl
    {
        public static List<string[]> consAntiguedadToChartView(List<ConsolidadoAntiguedad> consolidado, int tipoChart)
        {
            List<string[]> retorno = new List<string[]>();
            List<string> auxFila1 = new List<string>();
            List<string> auxFila2 = new List<string>();
            List<string> auxFila3 = new List<string>();
        
            auxFila1.Add("string");
            auxFila2.Add("Fecha");
            auxFila3.Add("Rango de Dias");

            foreach (var c in consolidado)
            {
                auxFila1.Add("number");
                auxFila2.Add(c.nombreDiasAnt);
                auxFila3.Add(c.numeroDIRS.ToString());
            }

            retorno.Add(auxFila1.ToArray());
            retorno.Add(auxFila2.ToArray());
            retorno.Add(auxFila3.ToArray());

            return retorno;
        }

        public static List<string[]> consRazonesToChartView(List<ConsolidadoRazon> consolidado, int tipoChart)
        {
            List<string[]> retorno = new List<string[]>();
            
            if (tipoChart == Constantes.PIECHART /*|| tipoChart == Constantes.COLUMNCHART*/)
            {
                retorno = (from item in consolidado
                           select (item.obtenerArreglo())).ToList();
                retorno.Insert(0, ConsolidadoRazon.obtenerCabecera(1));
                retorno.Insert(0, ConsolidadoRazon.obtenerCabecera(2));
                return retorno;
            }
            else //if (tipoChart == Constantes.LINECHART || tipoChart == Constantes.TABLECHART)
            {
                List<string> cabecera, tiposDato;
                List<string> elementoLista = new List<string>();

                var motivos = consolidado.AsQueryable().GroupBy(a => new { a.motivo }).Select(
                    k => new { motivo = k.Key.motivo }).ToList();
                
                cabecera = new List<string>();
                tiposDato = new List<string>();
                tiposDato.Add("string");
                cabecera.Add("Fecha");

                foreach (var t in motivos)
                {
                    tiposDato.Add("number");
                    cabecera.Add(t.motivo);
                }

                retorno.Add(tiposDato.ToArray());
                retorno.Add(cabecera.ToArray());

                var consColumna = consolidado.AsQueryable().GroupBy(a => new { a.stFecha }).Select(k =>
                    new { fecha = k.Key.stFecha }).ToList();

                foreach (var c in consColumna)
                {
                    elementoLista = new List<string>();
                    if (c.fecha == null) { elementoLista.Add("Motivos Inoperativos"); }
                    else { elementoLista.Add(c.fecha); }
                    
                    var consAux = consolidado.Where(a => a.stFecha == c.fecha).ToList();
                    foreach (var k in motivos)
                    {
                        var elementoMotivo = consAux.AsQueryable().Where(a => a.motivo == k.motivo);
                        if (elementoMotivo.Count() > 0)
                        {
                            elementoLista.Add(elementoMotivo.First().cantidadDIRS.ToString());
                        }
                        else
                        {
                            elementoLista.Add("0");
                        }
                    }
                    retorno.Add(elementoLista.ToArray());
                }
                if (retorno.Count() == 3 && tipoChart == Constantes.LINECHART) { retorno.Add(elementoLista.ToArray()); }
                return retorno;
            }
            
            return null;
        }

        public static List<string[]> consRepresentantesToChartView(List<DIR> consolidado, int tipoChart)
        {
            
            List<string[]> retorno = new List<string[]>();

                retorno = (from item in consolidado
                           select (item.obtenerArreglo())).ToList();
                retorno.Insert(0, DIR.obtenerCabecera(tipoChart, 1));
                retorno.Insert(0, DIR.obtenerCabecera(tipoChart, 2));
            

            return retorno;
        }

        public static List<string[]> consTreeToChartView(List<TreeTransaccion> consolidado)
        {
            List<int> ff = new List<int>();
            foreach (var c in consolidado)
            {
                if (c.inColor > 0)
                {
                    ff.Add(c.inColor);
                }
            }
            List<string[]> retorno;
            retorno = (from item in consolidado
                       select (item.obtenerArreglo(Constantes.TREEPANELCONTROL,-1))
                                          ).ToList();
            retorno.Insert(0, TreeTransaccion.obtenerCabecera(1));
            retorno.Insert(0, TreeTransaccion.obtenerCabecera(2));
            return retorno;
        }
    }
}